package com.itheima.zhaohang.webview;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private WebView     mWebView;
    private long        mTime;
    private WebSettings mSettings;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webview);


        //不会弹出系统浏览器,只会在本地浏览器中进行展示
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {


                return true;
            }

            //网页加载前
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            //网页加载后
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
        //跟上面方法一起用，能在本应用中进行弹出界面，而不会跳转其他app
        mWebView.setWebChromeClient(new WebChromeClient() {

            //网页加载的进度返回
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }

            //获取网页的标题
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
            }
        });


        //展示webview
        mWebView.loadUrl("http://www.itcast.cn/");


/*

        //展示本地的html文件
         mWebView.loadUrl("file:///android_asset/demo.html");
*/

        //默认界面是不会弹广告的
        inDonging();
        //缓存设置
        saves();
        //清理缓存
        clearDBsave();
        //Cookie设置
        settingCookie();

    }

    private void settingCookie() {
//
//        - Cookie设置
//
//        CookieSyncManager.createInstance(this);
//        CookieManager cookieManager = CookieManager.getInstance();
//        cookieManager.setAcceptCookie(true);
//
//        String cookie = "name=xxx;age=18";
//        cookieManager.setCookie(URL, cookie);
//        CookieSyncManager.getInstance().sync();
//
//        - 获取Cookie
//
//        CookieManager cookieManager = CookieManager.getInstance();
//        String cookie = cookieManager.getCookie(URL);
//
//        - 清除Cookie
//
//        CookieSyncManager.createInstance(context);
//        CookieManager cookieManager = CookieManager.getInstance();
//        cookieManager.removeAllCookie();
//        CookieSyncManager.getInstance().sync();


    }

    private void clearDBsave() {

        最简便的方式:
        mWebView.clearCache(true);

//
//        另外一种方式:
//        //删除缓存文件夹
//        File file = CacheManager.getCacheFileBaseDir();
//
//
//        if (file != null && file.exists() && file.isDirectory()) {
//            for (File item : file.listFiles()) {
//                item.delete();
//            }
//            file.delete();
//        }
//
//        //删除缓存数据库
//        context.deleteDatabase("webview.db");
//        context.deleteDatabase("webviewCache.db");




    }

    private void saves() {


        //只要本地有，无论是否过期，或者no-cache，都使用缓存中的数据
        mSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        //只加载缓存
//        mSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
//        //根据cache-control决定是否从网络上取数据
//        mSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
//        //不加载缓存
//        mSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

//         什么是cache-control?
//                 cache-control是在请求网页时服务器的响应头,此响应头用于决定网页的缓存策略.
//                 常见的取值有public(所有内容都将被缓存), private(内容只缓存到私有缓存中),
//         no-cache(所有内容都不会被缓存),max-age=xxx(缓存的内容将在 xxx 秒后失效)等等
//
//         如图所示:
//
//         ![Cache_Control](./Cache_Control.png)


    }


    private void inDonging() {

        mSettings = mWebView.getSettings();

        //设置支持js功能才能弹广告
        mSettings.setJavaScriptEnabled(true);
        //显示缩放按钮（wap网页不支持）
        mSettings.setBuiltInZoomControls(true);
        //支持双击缩放（wap网页不支持）
        mSettings.setUseWideViewPort(true);


    }

    //后退时使用
    public void before(View view) {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
        }
    }

    //前进时使用
    public void next(View view) {
        if (mWebView.canGoForward()) {
            mWebView.goForward();
        }
    }

    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
        } else {

            long currentTimeMillis = System.currentTimeMillis();
            if ((currentTimeMillis - mTime) < 2000) {
                finish();
            } else {
                mTime = currentTimeMillis;
                Toast.makeText(this, "再按一次，退出应用", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
